package dichotomy.findmin;
/**
 * @Date 2020/1/23
 * @author 王光浩
 * @Need 给出一个升序的整型数组，但是这个升序的数组在某一个出进行了旋转，找出这个数组中最小的值。数组中存在
 *       重复元素。
 * @Thinking 使用二分法。
 *           方法：如果nums[mid]<nums[previous]时，将previous++,如果
 *           复杂度分析：时间复杂度O（logn），空间复杂度O（1）
 */
public class MyMethodTwo {
    public int findMin(int[] nums) {
    	int previous=0,later=nums.length-1;
    	int mid=0;
    	while(previous<later) {
    		mid=previous+(later-previous)/2;
    		if(nums[mid]>nums[later])
    			previous=mid+1;
    		else if(nums[mid]<nums[previous])
    			later=mid;
    		else
    			later--;
    	}
    	return nums[later];
    }
}
